#include <iostream>
using namespace std;
//初始化列表
//class Data
//{
//public:
//    Data(int c)//构造函数列表
//    :_year(2021)
//    ,_month(10)
//    ,_day(21)
//    ,c(c)
//   // ,_day(10)
//    {
//        _year=2004;
//        _month=11;
//
//
//    }
//    void Print()
//    {
//        cout<<_year<<'/'<<_month<<'/'<<_day<<endl;
//    }
//
//
//private:
//    int _year;
//    int _month;
//    const int _day;
//     int &c;
//};

//class Data
//{
//public:
//    Data(int c)//构造函数列表
//    :
//    _month(c),
//    _year(_month)
//
//   // ,_day(10)
//    {
//
//    }
//    void Print()
//    {
//        cout<<_year<<'/'<<_month<<'/'<<endl;
//    }
//
//
//private:
//    int _year;
//    int _month;
//};
//
//int main()
//{
//
//    Data d1(1);
//    d1.Print();
//    return 0;
//
//    不管你有没有写构造函数列表默认都会生成，在调用构造函数进入内部之前就先吧数据赋值了
//    他还可以调用动态开辟的函数
//    且他每个变量只能初始化一次
//    const 的变量，引用成员变量，自定义成员变量且没有写默认构造函数的情况下
//    声明次序与其在构造列表无关,如果声明先声明A，B，那么列表也会这样次序构造
//}



//explicit
//class Data
//{
//public:
//    Data()
//    {
//      cout<<"Data()"<<endl;
//    }
//    Data(int i)
//    {
//        cout<<" Data(int i)"<<endl;
//    }
//    void Print()
//    {
//        cout<<_year<<'/'<<_month<<'/'<<_day<<endl;
//    }
//    ~Data()
//    {
//        cout<<" ~Data()"<<endl;
//    }
//    Data(Data&d1)
//    {
//        cout<<"  Data(Data&d1)"<<endl;
//    }
//
//    Data&operator=( Data&d1)
//    {
//        cout<<"Data&operator=( Data&d1)"<<endl;
//    }
//
//
//private:
//    int _year=10;
//    int _month=20;
//    int _day=30;
//};
//
//
//
//int main()
//{
//
//    Data d1=2;
//
//
////Data d1=2,本质上是先把2构造成类，然后在拷构造成d1，其中编译优化了就直接吧2当作参数构造d1==Data d1(2)
////如过你觉得这样会和拷贝构造搞混那么你可以用一个关键字来解决explicit，那么2就不会强制类型转换
//// （不会调用构造函数生成类），那么编译器就不会优化不会把他当作参数
//}


//static修饰的成员变量
//class Data
//{
//public:
//    Data()
//    {
//        _age++;
//      cout<<"Data()"<<endl;
//    }
//    Data(int i)
//    {
//        cout<<" Data(int i)"<<endl;
//    }
//    static void Print()
//    {
//        //cout<<_year<<'/'<<_month<<'/'<<_day<<endl;
//        cout<<_age<<endl;
//    }
//    ~Data()
//    {
//        cout<<" ~Data()"<<endl;
//    }
//    Data(Data&d1)
//    {
//        cout<<"  Data(Data&d1)"<<endl;
//    }
//
//    Data&operator=( Data&d1)
//    {
//        cout<<"Data&operator=( Data&d1)"<<endl;
//    }
//
//
//private:
//    int _year=10;
//    int _month=20;
//    int _day=30;
//    static int  _age;
//};
//
//int Data ::  _age=0;
//int main()
//{
//   Data d[5];
//   Data::Print();
//
//   //static所修饰的变量初始化一定要在外面，且一定要域指明 "int Data ::  _age=0;"
//   //他和C语言语言static所修饰的成员都放在了静态区了
//   //且如果是公有访问域加变量即可访问
     //本质来讲就是他就和修饰变量一样初始化不一样罢了
//}



//
//class Count
//{
//public:
//    Count()
//    {
//        ret+=tmp++;
//    }
//    int Rteurn()
//    {
//        return ret;
//    }
//
//private:
//    static int tmp;
//    static int ret;
//
//};
//
//int Count::tmp=1;
//int Count::ret=0;
//
//class Solution
//{
//public:
//    int Sum_Solution(int n)
//    {
//        Count C[n];
//        return C->Rteurn();
//    }
//};
//
//
//int main()
//{
//    Solution d1;
//    d1.Sum_Solution(5);
//}










